package com.lancoo.answer.util;

import android.annotation.SuppressLint;
import android.content.Context;
import android.media.SoundPool;

import com.lancoo.answer.R;

import java.util.HashMap;

public class ScoreSoundUtils {

    /**
     * 上下文
     */
    private Context mContext;
    /**
     * 添加的声音资源参数
     */
    private HashMap<Integer, Integer> soundPoolMap;
    /**
     * 声音池
     */
    public static SoundPool mSoundPool;
    /**
     * 单例
     */
    private static ScoreSoundUtils instance;

    public ScoreSoundUtils(Context context) {
        mContext = context;
    }

    public static ScoreSoundUtils getInstance(Context context) {
        if (instance == null) {
            instance = new ScoreSoundUtils(context);
            instance.init();
        }
        return instance;
    }

    /**
     * 初始化声音
     */
    @SuppressLint("NewApi")
    public void init() {
        mSoundPool = new SoundPool.Builder().build();
        soundPoolMap = new HashMap<>();
        putSound(0, R.raw.ev_numadd);
        putSound(1, R.raw.ev_congratulations);
        putSound(2, R.raw.ev_score_up);//结果页面认知等级上升音效
        putSound(3, R.raw.ev_score_down);//结果页面认知等级下降音效
        putSound(4, R.raw.ev_number_plus);//结果页面分数累加音效
    }


    private void putSound(int order, int soundRes) {
        // 上下文，声音资源id，优先级
        soundPoolMap.put(order, mSoundPool.load(mContext, soundRes, 0));
    }

    /**
     * 根据序号播放声音
     *
     * @param order
     */
    public void playSound(int order) {
        mSoundPool.play(
                soundPoolMap.get(order),
                1f,       //左耳道音量【0~1】
                1f,       //右耳道音量【0~1】
                0,        //播放优先级【0表示最低优先级】
                0,        //循环模式【0表示循环一次，-1表示一直循环，其他表示数字+1表示当前数字对应的循环次数】
                1         //播放速度【1是正常，范围从0~2】
        );
    }

    /**
     * 释放内存
     */
    public void release() {
//        LogUtil.e("SoundUtil", "release: ");
        if (mSoundPool != null) {
            mSoundPool.release();
            mSoundPool = null;
        }
        instance = null;
    }

    /**
     * 暂停正在播放的所有数据流
     */
    public void stopSoundPool(int id) {
        if (mSoundPool != null) {
            mSoundPool.stop(id);
        }
    }

    public void stopAllSoundPool() {
        if (mSoundPool != null) {
            mSoundPool.stop(0);
            mSoundPool.stop(1);
            mSoundPool.stop(2);
        }
    }

    /**
     * 自动恢复之前调用autoPause（）时暂停的所有流
     */
    public void autoResume() {
        mSoundPool.autoResume();
    }

}
